// 分组信息
// by indraw 2013.02.01
package bbs

import (
    "strconv"
    "utils/util"
    "utils/mgo/bson"

)

//用户分组
type GroupUser struct{
    Dao
    GroupUserData
}

//论坛用户组
type GroupUserData struct{
    Groupid int //分组ID
    Adminid int //管理ID
    Type    int //类型
    Grouptitle string   //分组名称
    Cbhigher int     //贡献最高值
    Cblower int      //贡献最低值
    Stars string    //星星图片
    Color string     //分组颜色
    Avatar string  //标志图
    Readlevel int   //阅读权限
    Allowhidden int  //登录状态调整
    Allowvisit  int   //允许访问
    Allowpost  int     //允许发表
    Allowreply  int    //允许回复
    Allowpostorder  int  //允许发布花费贴
    Allowpostlevel  int   //查看等级分
    Allowpostreply  int   //允许回复帖子
    Allowpostask  int    //允许发布悬赏帖子
    Allowdirectpost  int    //允许发布跳转帖子
    Allowupload  int     //允许上传
    Allowdownload  int    //允许下载
    Allowsearch  int      //允许搜索
    Allowavatar  int      //允许自定义头像
    Allowhtml int    //允许html
    Allowubbcode  int   //允许bbscode
    Allowanonymous int   //允许匿名
    Allowviewuser  int    //允许查看用户
    Allowviewstat int   //允许查看统计
    Allowviewhide int    //允许查看隐藏
    Allowtransfer  int   //允许交易
    Allowviewpic int     //是否允许查看图片
    Allowsig  int     //允许签名
    Maxsigsize  int   //签名字数
    Maxorder  int     //最大查看花费
    Maxprice  int    //最大悬赏
    Minprice  int   //最小悬赏
    Maxpostsperhour  int  //每小时最大发表
    Maxrateperday  int  //每天最大评分
    Maxupload  int   //最大上传量
    Allowpnew  int  //允许发表插件主题
    Allowpjoin  int  //允许参与插件主题
    Order  int      //显示
    Status int  //状态
}

/**
 * 初始化对象
 *
 * author: indraw
 * date: 2013-02-11
 */
func newGroupUser() *GroupUser {
    
    c := &GroupUser{
        Dao{
            c:db.C("group_user"),
        },
        GroupUserData{
            Groupid:0, //分组ID
            Adminid:0, //管理ID
            Type:0, //类型
            Grouptitle:"",   //分组名称
            Cbhigher:0,     //贡献最高值
            Cblower:0,      //贡献最低值
            Stars:"",    //星星图片
            Color:"",     //分组颜色
            Avatar:"",  //标志图
            Readlevel:0,  //阅读权限
            Allowhidden:0,  //登录状态调整
            Allowvisit:0,   //允许访问
            Allowpost:0,     //允许发表
            Allowreply:0,    //允许回复
            Allowpostorder:0,  //允许发布花费贴
            Allowpostlevel:0,   //查看等级分
            Allowpostreply:0,   //允许回复帖子
            Allowpostask:0,    //允许发布悬赏帖子
            Allowdirectpost:0,    //允许发布跳转帖子
            Allowupload:0,     //允许上传
            Allowdownload:0,    //允许下载
            Allowsearch:0,      //允许搜索
            Allowavatar:0,     //允许自定义头像
            Allowhtml:0,    //允许html
            Allowubbcode:0,   //允许bbscode
            Allowanonymous:0,   //允许匿名
            Allowviewuser:0,    //允许查看用户
            Allowviewstat:0,   //允许查看统计
            Allowviewhide:0,    //允许查看隐藏
            Allowtransfer:0,   //允许交易
            Allowviewpic:0,    //是否允许查看图片
            Allowsig:0,     //允许签名
            Maxsigsize:0,  //签名字数
            Maxorder:0,     //最大查看花费
            Maxprice:0,    //最大悬赏
            Minprice:0,   //最小悬赏
            Maxpostsperhour:0,  //每小时最大发表
            Maxrateperday:0, //每天最大评分
            Maxupload:0,   //最大上传量
            Allowpnew:0,  //允许发表插件主题
            Allowpjoin:0,  //允许参与插件主题
            Order:0,      //显示
            Status:0,  //状态
        },
    }
    return c
}


/**
 * 设置用户ID
 *
 * author: indraw
 * date: 2013-02-11
 */
func (g *GroupUser) setGroupid( groupid string ) {
    
    if m := util.CheckNumber(groupid); !m {
        g.newError("请填写userid")
        return
    }
    g.Groupid,_= strconv.Atoi(groupid)
}

/**
 * 写入数据库
 *
 * author: indraw
 * date: 2013-02-11
 */
func (g *GroupUser) add() error {
    
    //判断错误
    if err := g.ckError(); err != nil {
        return err
    }
    //判断是否重复

    //执行写入
    if  err := g.c.Insert(&g.GroupUserData); err != nil {
        return err
    }
    
    return nil
}

/**
 * 获取一条记录
 *
 * author: indraw
 * date: 2013-02-11
 */
func (g *GroupUser) get() error {
    //判断错误
    if err := g.ckError(); err != nil {
        return err
    }

    //执行
    if  err := g.c.Find(bson.M{"groupid": g.Groupid}).One(&g.GroupUserData); err != nil {
        return err
    }
    return nil
}

/**
 * 分页获取记录
 *
 * author: indraw
 * date: 2013-02-11
 */
func (g *GroupUser) list(page *util.PageMaker) []GroupUserData {
    //fmt.Println("user.go")
    //判断是否重复
    var l []GroupUserData
    
    return l
    
}

/**
 * 删除一条记录
 *
 * author: indraw
 * date: 2013-02-11
 */
func (g *GroupUser) count() int {
    //fmt.Println("user.go")
    var n int
    n,err := g.c.Find(nil).Count()
    if err != nil{
        n = 0
    }
    
    return n
}

/**
 * 获取前多少条记录
 *
 * author: indraw
 * date: 2013-02-11
 */
func (g *GroupUser) top() []GroupUserData {
    //fmt.Println("user.go")
    var l []GroupUserData
    g.c.Find(nil).Sort("order").All(&l)

    return l
    
}

/**
 * 获取前多少条记录
 *
 * author: indraw
 * date: 2013-02-11
 */
func (g *GroupUser) topSys() (map[int]GroupUserData, map[int]string) {
    //fmt.Println("user.go")
    var l []GroupUserData
    g.c.Find(nil).Sort("order").All(&l)

    var l2 map[int]GroupUserData
    l2 = make(map[int]GroupUserData)

    var l3 map[int]string
    l3 = make(map[int]string)
    
    for _,v:=range l{
        l2[v.Groupid] = v
        l3[v.Groupid] = v.Grouptitle
    }
    return l2,l3
    
}


/**
 * 更新一条记录
 *
 * author: indraw
 * date: 2013-02-11
 */
func (g *GroupUser) update() error {
    //fmt.Println("user.go")
    
    return nil
}

/**
 * 删除一条记录
 *
 * author: indraw
 * date: 2013-02-11
 */
func (g *GroupUser) delete() error {
    //fmt.Println("user.go")
    
    return nil
}

